#pragma once

#include <string>
using std::string;

#include "../AchievementManager.h"

typedef string EVENTID;		//	could be an int or enum

class Event
{
private:
	EVENTID			eventID;		//	The event's id type.
	void*			param;		//	Store any variable type (but only one)
	void*			m_pDestination;	// Intended listener
	void*			sender;		// Object that sent the event

	AchievementSystem::AchievementData* achievementData;

public:
	Event(EVENTID eventID, void* pParam, void* pDestination, void* pSender, AchievementSystem::AchievementData* pAchievementData = nullptr )
	{
		this->eventID		= eventID;
		param		= pParam;
		m_pDestination	= pDestination;
		sender		= pSender;
		achievementData = pAchievementData;
	}

	~Event() {}

	//	Accessors:
	inline EVENTID  GetEventID		( void )	{	return eventID;		}
	inline void*	GetParam		( void )	{	return param;		}
	inline void*	GetDestination	( void )	{	return m_pDestination;	}
	inline void*	GetSender		( void )	{	return sender;		}

	inline AchievementSystem::AchievementData* GetAchievementData(void) { return achievementData; }
};